package com.zh.note.leetcode.stackqueue;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 一个队列实现
 */






public class LC_255_MyStack {
    class MyStack {
        Queue<Integer> queue;

        public MyStack() {
            queue = new LinkedList<>();

        }

        public void push(int x) {
            queue.offer(x);
            int n = queue.size();
            // 把前n-1个元素重新加入到队列里面
            for (int i = 0; i < n - 1; i++) {
                queue.offer(queue.poll());
            }

        }

        public int pop() {
            return queue.poll();


        }

        public int top() {
            // 直接返回队列里最后一个元素
            return queue.peek();


        }

        public boolean empty() {
            return queue.isEmpty();

        }
    }

    class MyStack2 {
        Queue<Integer> queue1; //和栈中保持一样元素的队列
        Queue<Integer> queue2; // 辅助队列

        public MyStack2() {
            queue1 = new LinkedList<>();
            queue2 = new LinkedList<>();

        }

        public void push(int x) {
            // 新添加的元素先放入辅助队列
            queue2.offer(x);
            // 再把queue1中元素全部放到辅助队列
            while (!queue1.isEmpty()) {
                queue2.offer(queue1.poll());
            }
            // 最后交换queue1和queue2，将元素都放到queue1中
            Queue<Integer> temp = queue1;
            queue1 = queue2;
            queue2 = temp;

        }

        public int pop() {
            return queue1.poll();


        }

        public int top() {
            return queue1.peek();


        }

        public boolean empty() {
            return queue1.isEmpty();

        }
    }
}
